? imagecache_actions.jquery.js
Index: canvasactions.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/imagecache_actions/canvasactions.inc,v
retrieving revision 1.1.4.8
diff -u -p -r1.1.4.8 canvasactions.inc
--- canvasactions.inc	12 Mar 2009 22:46:37 -0000	1.1.4.8
+++ canvasactions.inc	14 Mar 2009 20:55:01 -0000
@@ -423,6 +423,7 @@ function canvasactions_file2canvas_image
  * @return a form definition
  */
 function canvasactions_roundedcorners_form($action) {
+  drupal_add_js(drupal_get_path('module', 'imagecache_canvasactions') .'/imagecache_actions.jquery.js');
   $defaults = array(
     'radius' => '16',
     'antialias' => TRUE,
@@ -435,6 +436,41 @@ function canvasactions_roundedcorners_fo
       '#default_value' => $action['radius'],
       '#size' => 2,
   );
+  $form['independent_corners_set'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Individual Corner Values'),
+      '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+  );
+  $form['independent_corners_set']['independent_corners'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Set Corners Independently'),
+      '#default_value' => $action['independent_corners_set']['independent_corners'],
+  );
+  $form['independent_corners_set']['radiustl'] = array(
+      '#type' => 'textfield',
+      '#title' => t('top left radius'),
+      '#default_value' => $action['independent_corners_set']['radiustl'],
+      '#size' => 2,
+  );
+  $form['independent_corners_set']['radiustr'] = array(
+      '#type' => 'textfield',
+      '#title' => t('top right radius'),
+      '#default_value' => $action['independent_corners_set']['radiustr'],
+      '#size' => 2,
+  );
+  $form['independent_corners_set']['radiusbl'] = array(
+      '#type' => 'textfield',
+      '#title' => t('bottom left radius'),
+      '#default_value' => $action['independent_corners_set']['radiusbl'],
+      '#size' => 2,
+  );
+  $form['independent_corners_set']['radiusbr'] = array(
+      '#type' => 'textfield',
+      '#title' => t('bottom right radius'),
+      '#default_value' => $action['independent_corners_set']['radiusbr'],
+      '#size' => 2,
+  );
 
   $form['antialias'] = array(
       '#type' => 'checkbox',
@@ -471,15 +507,33 @@ function canvasactions_roundedcorners_fo
  * @param $action
  */
 function canvasactions_roundedcorners_image(&$image, $action = array()) {
-
   $width = $image->info['width'];
   $height = $image->info['height'];
   $radius = $action['radius'];
+  $independent_corners = $action['independent_corners_set']['independent_corners'];
+  $radiustl = $action['independent_corners_set']['radiustl'];
+  $radiustr = $action['independent_corners_set']['radiustr'];
+  $radiusbl = $action['independent_corners_set']['radiusbl'];
+  $radiusbr = $action['independent_corners_set']['radiusbr'];
+  if(!$independent_corners){
+    $radiustl = $radiustr = $radiusbl = $radiusbr = $radius;
+  }
 
   if ($action['antialias']) {
     $width = $width * 3;
     $height = $height * 3;
-    $radius = $radius * 3;
+    //$radius = $radius * 3;
+    if($independent_corners){
+      $radiustl = $radiustl * 3;
+      $radiustr = $radiustr * 3;
+      $radiusbl = $radiusbl * 3;
+      $radiusbr = $radiusbr * 3;
+    } else {
+      $radiustl = $radius * 3;
+      $radiustr = $radius * 3;
+      $radiusbl = $radius * 3;
+      $radiusbr = $radius * 3;
+    }
   }
   
   // Create a mask with rounded corners
@@ -503,21 +557,38 @@ function canvasactions_roundedcorners_im
 
   // Blobs in the corners
   $diameter = $radius * 2;
-  ImageFilledEllipse($mask, $radius, $radius, $diameter, $diameter, $foreground);
-  ImageFilledEllipse($mask, $width-$radius, $radius, $diameter, $diameter, $foreground);
-  ImageFilledEllipse($mask, $radius, $height-$radius, $diameter, $diameter, $foreground);
-  ImageFilledEllipse($mask, $width-$radius, $height-$radius, $diameter, $diameter, $foreground);
+  if($independent_corners){
+      $diametertl = $radiustl * 2;
+      $diametertr = $radiustr * 2;
+      $diameterbl = $radiusbl * 2;
+      $diameterbr = $radiusbr * 2;
+    } else {
+      $diametertl = $radiustl * 2;
+      $diametertr = $radiustr * 2;
+      $diameterbl = $radiusbl * 2;
+      $diameterbr = $radiusbr * 2;
+    }
+  ImageFilledEllipse($mask, $radiustl, $radiustl, $diametertl, $diametertl, $foreground);
+  ImageFilledEllipse($mask, $width-$radiustr, $radiustr, $diametertr, $diametertr, $foreground);
+  ImageFilledEllipse($mask, $radiusbl, $height-$radiusbl, $diameterbl, $diameterbl, $foreground);
+  ImageFilledEllipse($mask, $width-$radiusbr, $height-$radiusbr, $diameterbr, $diameterbr, $foreground);
   
   // Block out the middle
-  ImageFilledRectangle($mask, $radius, 0, $width-$radius, $height, $foreground);
-  ImageFilledRectangle($mask, 0, $radius, $width, $height-$radius, $foreground);
+  ImageFilledRectangle($mask, $radiustl, 0, $width*0.5, $height*0.5, $foreground);
+  ImageFilledRectangle($mask, 0, $radiustl, $width*0.5, $height*0.5, $foreground);
+  ImageFilledRectangle($mask, $width*0.5, 0, $width-$radiustr, $height*0.5, $foreground);
+  ImageFilledRectangle($mask, $width*0.5, $radiustr, $width, $height*0.5, $foreground);
+  ImageFilledRectangle($mask, 0, $height*0.5, $width*0.5, $height-$radiusbl, $foreground);
+  ImageFilledRectangle($mask, $radiusbl, $height*0.5, $width*0.5, $height, $foreground);
+  ImageFilledRectangle($mask, $width*0.5, $height*0.5, $width, $height-$radiusbr, $foreground);
+  ImageFilledRectangle($mask, $width*0.5, $height*0.5, $width-$radiusbr, $height, $foreground);
 
   if ($action['antialias']) {
     // Use toolkit so scale down again. 
     imageapi_image_scale($mask_image, $width/3, $height/3);
     $mask = $mask_image->resource;
   }
-  // No we have a mask. Merge to get a result
+  // Now we have a mask. Merge to get a result
   #$image->res = $mask;  
   canvasactions_mask($image, $mask_image);
   
@@ -586,8 +657,12 @@ function canvasactions_mask(&$image, $ma
  */
 function theme_canvasactions_roundedcorners($element) {
   $data = $element['#value'];
+  if($data['independent_corners_set']['independent_corners']){
+    return "Radius: {$data['independent_corners_set']['radiustl']}px | {$data['independent_corners_set']['radiustr']}px | {$data['independent_corners_set']['radiusbl']}px | {$data['independent_corners_set']['radiusbr']}px | " . ($data['antialias'] ? "antialiased" : "") ;
+  } else {
   return "Radius: {$data['radius']}px " . ($data['antialias'] ? "antialiased" : "") ;
 }
+}
 
 ///////////////////////////////////////////////////////////////////
 
